package com.example.springboot.controller;
// 导入MyBatis-Plus分页组件
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
// 导入通用返回结果类
import com.example.springboot.common.Result;
// 导入宿舍楼实体类
import com.example.springboot.entity.DormBuild;
// 导入宿舍楼业务层接口
import com.example.springboot.service.DormBuildService;
// 导入Spring MVC注解
import org.springframework.web.bind.annotation.*;
// 导入资源注入注解
import javax.annotation.Resource;
// 导入集合类和Stream API
import java.util.List;
import java.util.stream.Collectors;

/**
 * 宿舍楼管理控制器
 * 处理宿舍楼的增删改查及数据可视化相关接口
 */

@RestController// 标记为RESTful风格的控制器，返回JSON格式数据
@RequestMapping("/building")// 映射请求路径前缀
public class DormBuildController {
    // 注入宿舍楼业务层实现
    @Resource// JSR-250规范的资源注入注解，等价于@Autowired
    private DormBuildService dormBuildService;

    /**
     * 添加新宿舍楼、新楼宇
     *
     * @param dormBuild 宿舍楼实体对象（JSON格式请求体）
     * @return 操作结果（成功或失败信息）
     */
    @PostMapping("/add")// 映射POST请求：/building/add
    public Result<?> add(@RequestBody DormBuild dormBuild) {// 从JSON请求体解析DormBuild对象
        // 调用业务层添加方法
        int i = dormBuildService.addNewBuilding(dormBuild);
        // 根据业务层返回值判断操作结果
        if (i == 1) {
            return Result.success(); // 返回成功结果
        } else {
            return Result.error("-1", "添加失败");// 返回失败结果
        }
    }

    /**
     * 楼宇信息更新
     */
    @PutMapping("/update")// 映射PUT请求：/building/update
    public Result<?> update(@RequestBody DormBuild dormBuild) {// 从JSON请求体解析DormBuild对象
        // 调用业务层更新方法
        int i = dormBuildService.updateNewBuilding(dormBuild);
        // 根据更新结果返回响应
        if (i == 1) {
            return Result.success();
        } else {
            return Result.error("-1", "更新失败");
        }
    }

    /**
     * 楼宇删除
     */
    @DeleteMapping("/delete/{dormBuildId}")// 映射DELETE请求：/building/delete/{id}
    public Result<?> delete(@PathVariable Integer dormBuildId) {// 从路径变量获取宿舍楼ID
        // 调用业务层删除方法
        int i = dormBuildService.deleteBuilding(dormBuildId);
        // 根据删除结果返回响应
        if (i == 1) {
            return Result.success();
        } else {
            return Result.error("-1", "删除失败");
        }
    }

    /**
     * 楼宇查找
     */
    @GetMapping("/find")// 映射GET请求：/building/find
    public Result<?> findPage(@RequestParam(defaultValue = "1") Integer pageNum,
                              // 请求参数（默认值1）
                              @RequestParam(defaultValue = "10") Integer pageSize,
                              // 请求参数（默认值10）
                              @RequestParam(defaultValue = "") String search) {
                             // 请求参数（默认空字符串）
        // 调用业务层分页查询方法
        Page page = dormBuildService.find(pageNum, pageSize, search);
        if (page != null) {
            return Result.success(page);
        } else {
            return Result.error("-1", "查询失败");
        }
    }

    /**
     * 获取所有宿舍楼ID（用于首页Echarts可视化）
     *
     * @return 宿舍楼ID列表
     */
    @GetMapping("/getBuildingName")// 映射GET请求：/building/getBuildingName
    public Result<?> getBuildingName() {
        // 调用业务层获取所有宿舍楼信息
        List<DormBuild> buildingName = dormBuildService.getBuildingId();
        // 使用Stream API提取宿舍楼ID列表
        List<Integer> buildingId = buildingName.stream().map(dormBuildId -> dormBuildId.getDormBuildId()).collect(Collectors.toList());
        // 提取ID字段，收集为列表
        if (!buildingId.isEmpty()) {
            return Result.success(buildingId); // 返回宿舍楼ID列表
        } else {
            return Result.error("-1", "查询失败");// 返回失败结果
        }

    }
}
